package d0623;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class 员工管理 {
	
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		
		员工管理 em = new 员工管理();
		System.out.println("--------------S----------");
		em.queryEmp("S", 10);
		System.out.println("--------------A----------");
		em.queryEmp("A", 20);
		em.queryEmp("A", 0);
		em.queryEmp(null, 20);
		em.queryEmp(null, 0);
		/**
		 * 作业:
		 * 	1. 完成新增和修改方法
		 * 	2. 实现屏幕菜单, 控制执行, 实现屏幕录入员工信息
		 */
		
	}

	// 新增员工
	public void addEmp(int empno, String ename, double sal, int deptno) {

	}

	// 修改员工信息
	public void modEmp(int empno, String ename, double sal, int deptno) {

	}

	// 查询 : 组合条件查询, 如果2个参数都没值, 查全部,  如果ename不为空, 根据ename模糊查询
	public void queryEmp(String ename, int deptno) throws SQLException, ClassNotFoundException {
		/**
		 * ename == null  deptno == 0   => select * from emp;
		 * ename = 'A'  => select * from emp where ename like ?
		 * deptno = 10  => select * from emp where deptno = ?
		 * ename == A  deptno == 20   => select * from emp where ename like ? and deptno = ?;
		 */

		String sql = "select * from emp where 1=1";
		List<Object> params = new ArrayList<>();

		if (ename != null) {
			sql += " and ename like ?";
			params.add("%" + ename + "%");
		}

		if (deptno > 0) {
			sql += " and deptno = ? ";
			params.add(deptno);
		}

		System.out.println("SQL:" + sql);
		System.out.println("参数:" + params);
		
		Class.forName("oracle.jdbc.driver.OracleDriver");

		// 获取连接   本地地址 :  localhost(域名)   127.0.0.1(ip地址)  1521 默认端口
		String url = "jdbc:oracle:thin:@//127.0.0.1:1521/orcl";
		String user = "scott";
		String password = "a";
		Connection conn = DriverManager.getConnection(url, user, password);

		// 创建普通的语句对象
		PreparedStatement ps = conn.prepareStatement(sql);

		// 给参数占位符赋值
		for (int i = 0; i < params.size(); i++) {
			ps.setObject(i+1, params.get(i));
		}

		//专门用户查询的方法  调用不传sql遇见的方法
		ResultSet rs = ps.executeQuery();

		// 返回 boolean true: 进入下一行, false, 没有数据了
		while (rs.next()) {
			int empno = rs.getInt("EMPNO"); // oracle 驱动会将字段名转成大写
			String ename1 = rs.getString(2); // 序号从 1 开始
			java.sql.Date hiredate = rs.getDate(5); // 日期    java.sql.Date 是 java.util.Date 的子类
			double sal = rs.getDouble("SAL");
			System.out.printf("%4d %20s %20s %10.2f\n", empno, ename1, hiredate, sal);
		}

	}

}

